/**
 * @file LED.cpp
 * @author BadFatCat0919 (543015378@qq.com)
 * @brief LED灯驱动代码
 * @date 2022-04-06
 */

#include "LED.h"

/**
 * @brief 创建一个新的LED对象
 * @param pin 使用的引脚（默认为板载LED，使用gpio2）
 * @param onLevel LED开启时的引脚电平（默认为低电平）
 */
LED::LED(uint8_t pin, uint8_t onLevel) :
  _pin(pin), _onLevel(onLevel) {}

/**
 * @brief 销毁一个已创建的LED对象
 */
LED::~LED(void) {
  off();
}

/**
 * @brief 初始化LED
 * @return LED& 自身的引用
 */
LED &LED::init(void) {
  pinMode(_pin, OUTPUT);
  off();
  return *this;
}

/**
 * @brief 打开LED
 * @return LED& 自身的引用
 */
LED &LED::on(void) {
  digitalWrite(_pin, _onLevel);
  return *this;
}

/**
 * @brief 打开LED，并在指定时间后关闭
 * @param time 打开的时间
 * @return LED& 自身的引用
 */
LED &LED::on(unsigned long time) {
  on();
  delay(time);
  off();
  return *this;
}

/**
 * @brief 关闭LED
 * @return LED& 自身的引用
 */
LED &LED::off(void) {
  digitalWrite(_pin, !_onLevel);
  return *this;
}
